package ru.voice2blog.engine;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * User: ilya.ufo
 * Date: 18.05.11
 * Time: 1:53
 * <p/>
 * Следит за тем, когда будет прекращена запись.
 * Если файл не менялся с прошлого вызова этого метода, то запись завершена и можно вызывать его обработку.
 */
public class NotChangingFileResolver {

    private Map<String, Long> fileSizes = new HashMap<String, Long>();

    public List<File> resolveNotChanged(File[] files) {
        HashMap<String, Long> newFileSizes = new HashMap<String, Long>();
        HashMap<String, File> fileMap = new HashMap<String, File>();
        fillFileSizes(newFileSizes, fileMap, files);

        List<File> result = new ArrayList<File>();

        for (String fileName : newFileSizes.keySet()) {
            Long newSize = newFileSizes.get(fileName);
            Long oldSize = fileSizes.get(fileName);

            if (newSize.equals(oldSize)) {
                result.add(fileMap.get(fileName));
            }
        }
        fileSizes = newFileSizes;//Для того, чтобы очищались файлы, которые были просто так удалены.
        return result;
    }

    private void fillFileSizes(HashMap<String, Long> newFileSizes, HashMap<String, File> fileMap, File[] files) {
        for (File file : files) {
            assert file.exists() && file.isFile() : "Processing incorrect file : " + file.getName();
            fileMap.put(file.getName(), file);
            newFileSizes.put(file.getName(), file.length());
        }
    }

}
